The invention generally relates to compressing a firmware image.
When a computer system powers up, or “boots up,” a processor of the computer system typically executes a program that is stored in a non-volatile memory, or firmware memory, for purposes of performing various boot-up functions. As example, these functions may include detecting devices that are installed in the computer system, performing a power on self-test, loading the operating system, etc.
During an initial phase of the boot up, the main system memory is not yet initialized and thus, is unavailable. Therefore, during this phase, the processor executes instructions directly from the firmware memory. These instructions are part of execute-in-place (XIP) files that are stored in the firmware memory and are designated by a file type or moniker. The XIP files, as their names imply, are designed to be executed in place from the firmware memory without requiring the files to be copied, or “shadowed,” to another memory. Simple, linear addressing mechanisms are used to locate the XIP files.
The XIP files are part of a collection of files that form a firmware image. It is typically desirable to compress the size of the firmware image because the firmware memory has a limited capacity. Non-XIP files and the modules that are associated with these non-XIP files can be compressed because these files are typically associated with the phase of bootup in which system memory is available.
A typical type of compression is Lempel-Ziv-Welch (LZW) compression. In this approach, the compression algorithm creates a dictionary for a particular bit pattern and any pattern that has been read before. This results in a substitution of the commonality, resulting in shorter code sequences and effectively compressing the total amount of input data. Another typical type of compression is Huffman encoding. A Huffman encoding algorithm essentially maintains a count of the highest frequency occurring elements in a particular input data stream. The elements with the highest frequency get assigned shorter encodings, and the elements with the lower frequencies get assigned longer encodings. This accomplishes essentially the same goal of lossless compression of the input data.
Compression/decompression of non-XIP files may be used because the compressed non-XIP files may be copied into system memory where the non-XIP files may be decompressed. However, challenges arise in compressing XIP files because these files must be read directly from the firmware memory.
Thus, there is a continuing need for better ways to reduce the sizes of XIP files that are stored in a firmware memory.